package unsw.model;

public enum SatelliteParam {
    StandardSatellite("StandardSatellite", 1, 1, 150000.0, 2500.0, 3, 80, -1
            , new String[]{"HandheldDevice", "LaptopDevice", "StandardSatellite", "TeleportingSatellite", "RelaySatellite", "ElephantSatellite"}),
    TeleportingSatellite("TeleportingSatellite", 15, 10, 200000.0, 1000.0, Integer.MAX_VALUE, 200, 1
            , new String[]{"HandheldDevice", "LaptopDevice", "DesktopDevice", "StandardSatellite", "TeleportingSatellite", "RelaySatellite", "ElephantSatellite"}),
    RelaySatellite("RelaySatellite", Integer.MAX_VALUE, Integer.MAX_VALUE, 300000.0, 1500.0, Integer.MAX_VALUE, Integer.MAX_VALUE, -1
            , new String[]{"HandheldDevice", "LaptopDevice", "DesktopDevice", "StandardSatellite", "TeleportingSatellite", "RelaySatellite", "ElephantSatellite"}),
    ElephantSatellite("ElephantSatellite", 20, 20, 400000.0, 2500.0, 3, 90, -1
            , new String[]{"DesktopDevice", "LaptopDevice", "StandardSatellite", "RelaySatellite", "ElephantSatellite"});

    private final String name;
    private final int receiveSpeed;
    private final int sendSpeed;
    private final double availableDistance;
    private final double lineSpeed;
    private final int maxFileNumber;
    private final int storageCapacity;
    private final int direction;
    private final String[] availableDevices;

    SatelliteParam(String name, int receiveSpeed, int sendSpeed, double availableDistance, double lineSpeed, int maxFileNumber, int storageCapacity, int direction, String[] availableDevices) {
        this.name = name;
        this.receiveSpeed = receiveSpeed;
        this.sendSpeed = sendSpeed;
        this.availableDistance = availableDistance;
        this.lineSpeed = lineSpeed;
        this.maxFileNumber = maxFileNumber;
        this.storageCapacity = storageCapacity;
        this.direction = direction;
        this.availableDevices = availableDevices;
    }

    public int getReceiveSpeed() {
        return receiveSpeed;
    }

    public double getAvailableDistance() {
        return availableDistance;
    }

    public double getLineSpeed() {
        return lineSpeed;
    }

    public int getMaxFileNumber() {
        return maxFileNumber;
    }

    public int getStorageCapacity() {
        return storageCapacity;
    }

    public int getDirection() {
        return direction;
    }

    public String getName() {
        return name;
    }

    public int getSendSpeed() {
        return sendSpeed;
    }

    public String[] getAvailableDevices() {
        return availableDevices;
    }
}
